package config

import (
	"errors"
	"time"

	"gitee.com/xgotool/backend-framework-template/model/modellog"
	"gitee.com/xiaoyutab/xgotool/individual/xgorm"
	"gitee.com/xiaoyutab/xgotool/individual/xqueue"
	"github.com/glebarez/sqlite"
	"gorm.io/gorm"
	"gorm.io/gorm/logger"
)

var logs *gorm.DB    // 日志连接
var logs_date string // 日志日期
var logs_null bool   // 日志未配置，避免每次检测时都进行文件，一旦配置此值的话，不再往下获取（每隔1小时检测一次）

// 获取日志连接
func Log() (*xgorm.XDB, error) {
	if logs_null {
		return nil, errors.New("日志连接未配置")
	}
	if time.Now().Format(time.DateOnly) != logs_date {
		logs_date = time.Now().Format(time.DateOnly)
		logs = nil
	}
	if logs != nil {
		return xgorm.To(logs), nil
	}
	// 获取数据库连接，并自动建表
	// 因日志固定为sqlite，所以此处直接使用sqlite进行连接，不再进行数据库判断
	pth := GetExt().RunConf.LogPath
	if pth == "" {
		logs_null = true
		go func() {
			time.Sleep(time.Hour)
			logs_null = false
		}()
		return nil, errors.New("日志连接未配置")
	}
	// 进行日志检测压缩
	xqueue.Set("log.p7z", nil)
	pth += "/" + time.Now().Format(time.DateOnly) + ".db"
	conn, err := gorm.Open(sqlite.Open(pth), &gorm.Config{Logger: logger.Default.LogMode(logger.Silent)})
	if err != nil {
		return nil, err
	}
	logs = conn
	logs.AutoMigrate(
		&modellog.QuestLog{},
	)
	// 日志表初始化
	return xgorm.To(logs), nil
}
